查看原文
其他

ISSCC2017 Deep-Learning Processors文章学习 (四)

2017-02-13 T.S. StarryHeavensAbove


第四篇

“A 28nm SoC with a 1.2GHz 568nJ/Prediction Sparse Deep-Neural-Network Engine with >0.1 Timing Error Rate Tolerance for IoT Applications”

Paul N. Whatmough, Sae Kyu Lee, Hyunkwang Lee, Saketh Rama, David Brooks, Gu-Yeon Wei 

Harvard University, Cambridge, MA


This paper presents a 28nm SoC with a programmable FC-DNN accelerator design that demonstrates:  (1) HW support to exploit data sparsity by eliding unnecessary computations (4× energy reduction); (2) improved algorithmic error tolerance using sign-magnitude number format for weights and datapath computation; (3) improved circuit-level timing violation tolerance in datapath logic via timeborrowing; (4) combined circuit and algorithmic resilience with Razor timing violation detection to reduce energy via VDD scaling or increase throughput via FCLK scaling; and (5) high classification accuracy (98.36% for MNIST test set) while tolerating aggregate timing violation rates >10-1.


从这段概述可以看出,这篇文章的重点是利用error tolerance的技术提高能耗效率。另外,在开篇介绍了利用Razor技术降低功耗之后,作者提出:

ML algorithms offer remarkable inherent error tolerance and are a natural fit for Razor timing violation detection without the burden of explicit and guaranteed error correction. 


结合之前的讨论可以看出,ML/DL算法层面的并行性伸缩性稀疏性容错性,是优化DL processor 架构的基础。


本文工作使用了Razor技术,所以在进入正题之前,借几页ppt看看这项技术。总的来说,就是通过对关键路径的时序错误进行检测和修正,允许错误的出现,从而实现比较极限的低电压运行,整体降低功耗。



下面进入正题,首先是对并行性的考虑。作者试图给出一个合理的SIMD数据宽度。

在具体的设计方面,系统级的架构比较简单,没太多可说的。

重点还是DNN Engine的微结构:

这里比较清楚的显示了DNN Engine的微结构和流水线。主要有下面几个看点:

1. DNN Engine是5级流水SIMD(sparse matrix-vector(MxV)machine)。使用一个sequencer调度不同的DNN的处理。Host CPU把输入的vector放到IPBUF,然后8路MAC同时处理,输入可以是IPBUF或者XBUF(hidden layers)。在完成了累加操作之后,在activation stage加上bias并计算activation function(ReLU)结果写回XBUF(支持同时读取上一次的数据并写入本层数据)。MAC是16b定点,支持可编程的rounding模式,支持2的补码 two’s compliment (TC)或者符号数 sign-magnitude (SM),以及8b或16b的权重。

2. 对针对数据稀疏性的优化(输入数据和激活数据)。目前常用的方法是,针对输入的零操作数进行gating的功能,虽然可以降低功耗,但还是不能消除流水线上的bubble。这里使用的方法是通过在XBUF写回时动态的消除全零操作数来减少无效运算。此外,还可以跳过一些很小的非零值,而不影响运算的准确性。具体的方法是在ReLU之后,在activation stage 来比较输出的激活值和一个门限值(可以对每层进行设置)来产生一个SKIP信号来控制对XBUF的写回。另外,还使用了一个512B SRAM (NBUF) 存放前一层激活的节点的索引,W-MEM的地址就根据这个索引来生成。

3. 为了实现error-tolerant的操作,这个设计中在两个时序关键路径,W-MEM load and MAC unit的路径终点, 增加了Razor flip-flops (RZFFs)。双模式RZFF中的MUX可以选择支持 datapath FF功能或者带time borrowing的latch。一个全局的pulse clock (90-to-300ps pulse width) 同时确定RZFF的timing detection window和latch transparency time,满足hold time时延。


最后,作者根据实验结果进一步说明的利用DNN内在的容错性而进行优化的方法。

这个图分别针对weight memory负载,数据通道的MACs以及它们的组合这几种情况,给出了分类准确性( classification accuracy)和时间违反发生的频率(timing violation rates)间的关系。

对memory来说,采用SM(sign-magnitude)数符合weight矩阵的零均值高斯分布的特性,从而可以减少MSB的翻转。增加一个bit-masking (BM)来屏蔽weight word的单比特错误,可以容忍SRAM读操作的timing violation rates大于10-1 并实现98.36%准确度。

但是在数据通道上的容错比较困难,这是由于在累加器中的比特翻转会持续存在。尽管SM 有一定的好处,在电路级进行time borrowing更为有效,可以容忍的timing violation rates能够达到和memory类似的量级。在MAC中通过加法器的反馈路径实现从累加器的time borrowing是可行的。


个 人 观 点

本文的主要看点在于,充分利用DNN网络的内在容错性(弹性)以及Razor,time borrowing等方法,放宽对电路中关键路径的约束,允许出现一定数量的错误。从而在保证整体准确性的同时,可以更好的调整电压(允许工作在极限的低电压状态),实现更好的能耗控制

结合之前的讨论可以看出,如何利用(或者说适应)ML/DL应用和算法层面的并行性伸缩性稀疏性容错性,来提高硬件的效率,是设计和优化DL processor 架构的主要考虑方向。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存